﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlServerCe;

namespace Reportes
{
    class Consultas
    {
        private string strConexion;
        private SqlCeConnection Conexion;
        private SqlCeTransaction Transaxion;
       
        public void SetPath(string path)
        {
            if (path.Length > 0)
            {
                path = path + "; password=Seguridad.2011";
                strConexion = "Data Source=" + path;
                Conexion = new SqlCeConnection(strConexion);
            }
            else
            {
                String home = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
                home = home + @"\E-Factura\E-Factura App Copia\Info.sdf; password=Seguridad.2011";
                strConexion = "Data Source=" + home;
                Conexion = new SqlCeConnection(strConexion);
            }
        }
        
        public DataSet Consulta_Log(String Serie, String Folio, String TipoActivo, String FechaInicio, String FechaFin, string seEnvio, string archivo)
        {
            String WhereFecha = "";
            if ((!(FechaInicio.Trim().Length == 0)) && (!(FechaFin.Trim().Length == 0)))
            {
                WhereFecha = "WHERE Fecha BETWEEN '" + FechaInicio + " 00:00:00" + "' AND '" + FechaFin + " 23:59:59" + "' ";
            }

            String WhereSerie = "";
            if (!(Serie.Trim().Length == 0))
            {
                if (WhereFecha.Length > 0)
                {
                    WhereSerie = " AND Serie = '" + Serie + "' ";
                }
                else
                {
                    WhereSerie = " WHERE Serie = '" + Serie + "' ";
                }
            }

            String WhereFolio = "";
            if (!(Folio.Trim().Length == 0)) 
            {
                if (WhereFecha.Length > 0 || WhereSerie.Length > 0)
                {
                    WhereFolio = "AND Folio = '" + Folio + "' ";
                }
                else
                {
                    WhereFolio = "WHERE Folio = '" + Folio + "' ";
                }
            }

            String WhereTipoActivo = "";
            if (!(TipoActivo.Trim().Length == 0))
            {
                if (WhereFecha.Length > 0 || WhereSerie.Length > 0 || WhereFolio.Length > 0)
                {
                    WhereTipoActivo = "AND TipoActivo = '" + TipoActivo + "' ";
                }
                else
                {
                    WhereTipoActivo = "WHERE TipoActivo = '" + TipoActivo + "' ";
                }
            }

            String WhereEnvio = "";
            if (!(seEnvio.Trim().Length == 0))
            {
                if (WhereFecha.Length > 0 || WhereSerie.Length > 0 || WhereFolio.Length > 0 || WhereTipoActivo.Length > 0)
                {
                    WhereEnvio = " AND facturaProcesada = '" + seEnvio + "' ";
                }
                else
                {
                    WhereEnvio = " WHERE facturaProcesada = '" + seEnvio + "' ";
                }
            }

            string WhereArchivo = "";
            if (!(archivo.Trim().Length == 0))
            {
                if (WhereFecha.Length > 0 || WhereSerie.Length > 0 || WhereFolio.Length > 0 || WhereTipoActivo.Length > 0 || WhereEnvio.Length > 0)
                {
                    WhereArchivo = " AND Archivo = '" + archivo + "' ";
                }
                else
                {
                    WhereArchivo = " WHERE Archivo = '" + archivo + "' ";
                }
            }
            

            String consulta = "SELECT * "
                            + "FROM Log ";

            if (!WhereFecha.Equals("")) consulta += WhereFecha;
            if (!WhereSerie.Equals("")) consulta += WhereSerie;
            if (!WhereFolio.Equals("")) consulta += WhereFolio;
            if (!WhereTipoActivo.Equals("")) consulta += WhereTipoActivo;
            if (!WhereEnvio.Equals("")) consulta += WhereEnvio;
            if (!WhereArchivo.Equals("")) consulta += WhereArchivo;

            bool blConexionAbierta = false;

            DataSet dsDatos = new DataSet();
            try
            {
                System.Data.SqlServerCe.SqlCeCommand command = new SqlCeCommand(consulta, Conexion);

                if (Conexion.State == ConnectionState.Closed)
                {
                    blConexionAbierta = true;
                    Conexion.Open();
                }

                SqlCeDataReader reader;

                if (!blConexionAbierta)
                {
                    command.Transaction = Transaxion;
                }

                reader = command.ExecuteReader();
                DataTable dtTabla = new DataTable();
                dtTabla.Load(reader);
                dsDatos.Tables.Add(dtTabla);
                reader.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                if (blConexionAbierta)
                    Conexion.Close();
            }

            return dsDatos;
        }

        public DataSet archivos()
        {
            String consulta = "SELECT DISTINCT Archivo "
                            + "FROM Log";

            bool blConexionAbierta = false;

            DataSet dsDatos = new DataSet();
            try
            {
                System.Data.SqlServerCe.SqlCeCommand command = new SqlCeCommand(consulta, Conexion);

                if (Conexion.State == ConnectionState.Closed)
                {
                    blConexionAbierta = true;
                    Conexion.Open();
                }

                SqlCeDataReader reader;

                if (!blConexionAbierta)
                {
                    Transaxion = command.Transaction;
                }

                reader = command.ExecuteReader();
                DataTable dtTabla = new DataTable();
                dtTabla.Load(reader);
                dsDatos.Tables.Add(dtTabla);
                reader.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                if (blConexionAbierta)
                    Conexion.Close();
            }

            return dsDatos;
        }
    }
}
